package main

import "fmt"

// 每个函数只处理一个数据
// 对于处理函数而言，本身并不知道队列的存在
// 管道放入到for循环的体内,增加了函数调用次数
func main() {
	ns := []Num{1, 2, 3, 4, 5, 6}
	// 对队列里的每个数计算 2*x^2 + 6
	for i := range ns {
		ns[i].pow(2).multiply(2).add(6)
	}

	fmt.Println(ns)

}

type Num int

// 乘
func (p *Num) multiply(multiplier int) *Num {
	*p *= Num(multiplier)
	return p
}

// 加
func (p *Num) add(additive int) *Num {
	*p += Num(additive)
	return p
}

// 次方
func (p *Num) pow(index int) *Num {
	*p = Num(power1(int(*p), index))
	return p
}

func power1(data, i int) int {
	if i == 0 {
		return 1
	} else {
		return data * power1(data, i-1)
	}
}
